﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using System.Data.SqlClient;

namespace Grupo2.Persistencia
{
    public class OfertanteDAO
    {
        //Atributos
        //private String cadenaConexion = "Data Source=LOCALHOST;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";
        private String cadenaConexion = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Grupo2;Data Source=localhost";
        //private String cadenaConexion = @"Data Source=FW-LAPTOP\SSQLEXPRESS;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";
        private SqlConnection conexion;

        public OfertanteDAO()
        {
            conexion = new SqlConnection(cadenaConexion);
        }

        //Creando un ofertante
        public Ofertante CrearOfertante(Ofertante ofertante)
        {
            conexion.Open();
            String sentencia = "INSERT INTO Ofertante VALUES(" + ofertante.Id_Ofertante + ",'" +
                                                                ofertante.Email + "','" +
                                                                ofertante.Password + "','" +
                                                                ofertante.Ruc + "','" +
                                                                ofertante.Razon_Social + "','" +
                                                                ofertante.Direccion + "','" +
                                                                ofertante.Giro_Negocio + "','" +
                                                                ofertante.Representante_Legal + "','" +
                                                                ofertante.Nombre_Contacto + "','" +
                                                                ofertante.Telefono_Contacto + "','" +
                                                                ofertante.Email_Contacto +
                                                             "')";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerOfertante(ofertante.Id_Ofertante); //TODO: Queda pendiente de devolver objeto creado
        }
        
        //Obteniendo un ofertante
        public Ofertante ObtenerOfertante(Int32 Id_Ofertante)
        {
            conexion.Open();
            String sentencia = "SELECT * FROM Ofertante WHERE Id_Ofertante='" + Id_Ofertante + "'";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            Ofertante ofertante = new Ofertante();

            if (resultado.HasRows) //Si el resultado tiene filas, llenamos el objeto
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1
                ofertante.Id_Ofertante = Convert.ToInt32(resultado["Id_Ofertante"]);                
                ofertante.Email = (String)resultado["Email"];
                ofertante.Password = (String)resultado["Password"];
                ofertante.Ruc = (String)resultado["Ruc"];
                ofertante.Razon_Social = (String)resultado["Razon_Social"];
                ofertante.Direccion = (String)resultado["Direccion"];
                ofertante.Giro_Negocio = (String)resultado["Giro_Negocio"];
                ofertante.Representante_Legal = (String)resultado["Representante_Legal"];
                ofertante.Nombre_Contacto = (String)resultado["Nombre_Contacto"];
                ofertante.Telefono_Contacto = (String)resultado["Telefono_contacto"];
                ofertante.Email_Contacto = (String)resultado["Email_Contacto"];

            }
           
           else // Retornamos una excepción si no existe el registro en la BD
            {
                //throw new Exception("El codigo solicitado no existe en la BD");
                ofertante = null;
            }
            conexion.Close();
            return ofertante;
        }

        //Modificando Ofertante
        public Ofertante ModificarOfertante(Ofertante ofertante)
        {
            Ofertante ofertanteRegistrado = this.ObtenerOfertante(ofertante.Id_Ofertante);
            //Ofertante ofertanteRegistrado = this.ObtenerOfertanteConCorreoRepetido(ofertante.Dni, ofertante.Correo);
            //if (ofertanteRegistrado != null)
            //{
            //    throw new Exception("El ofertante con correo " + ofertante.Correo + "ya está registrado!");
            //}
            //else
            //{

                //String sentencia = "UPDATE ofertante SET nombres=@nombres, apellidos=@apellidos, edad=@edad, correo=@correo WHERE dni=@dni";
                String sentencia = "UPDATE Ofertante " +
                                    "SET " +
                                        "Password=@password, " +
                                        "Ruc=@ruc, " +
                                        "Email=@email, " +
                                        "Direccion=@direccion, " +
                                        "Giro_Negocio=@giro_negocio, " +
                                        "Representante_Legal=@representante_legal, " +
                                        "Nombre_Contacto=@nombre_contacto, " +
                                        "Telefono_Contacto=@telefono_contacto, " +
                                        "Email_Contacto=@email_contacto " +
                                        "WHERE " +
                                        "Id_Ofertante=@Id_Ofertante";
                this.conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
                {
                    SqlParameter Id_Ofertante = new SqlParameter("@Id_Ofertante", System.Data.SqlDbType.NVarChar);
                    Id_Ofertante.Value = ofertante.Id_Ofertante;
                    comando.Parameters.Add(Id_Ofertante);

                    SqlParameter password = new SqlParameter("@password", System.Data.SqlDbType.NVarChar);
                    password.Value = ofertante.Password;
                    comando.Parameters.Add(password);

                    SqlParameter ruc = new SqlParameter("@ruc", System.Data.SqlDbType.NVarChar);
                    ruc.Value = ofertante.Ruc;
                    comando.Parameters.Add(ruc);

                    SqlParameter email = new SqlParameter("@email", System.Data.SqlDbType.NVarChar);
                    email.Value = ofertante.Email;
                    comando.Parameters.Add(email);

                    SqlParameter direccion = new SqlParameter("@direccion", System.Data.SqlDbType.NVarChar);
                    direccion.Value = ofertante.Direccion;
                    comando.Parameters.Add(direccion);

                    SqlParameter giro_negocio = new SqlParameter("@giro_negocio", System.Data.SqlDbType.NVarChar);
                    giro_negocio.Value = ofertante.Giro_Negocio;
                    comando.Parameters.Add(giro_negocio);

                    SqlParameter representante_legal = new SqlParameter("@representante_legal", System.Data.SqlDbType.NVarChar);
                    representante_legal.Value = ofertante.Representante_Legal;
                    comando.Parameters.Add(representante_legal);

                    SqlParameter nombre_contacto = new SqlParameter("@nombre_contacto", System.Data.SqlDbType.NVarChar);
                    nombre_contacto.Value = ofertante.Nombre_Contacto;
                    comando.Parameters.Add(nombre_contacto);

                    SqlParameter telefono_contacto = new SqlParameter("@telefono_contacto", System.Data.SqlDbType.NVarChar);
                    telefono_contacto.Value = ofertante.Telefono_Contacto;
                    comando.Parameters.Add(telefono_contacto);

                    SqlParameter email_contacto = new SqlParameter("@email_contacto", System.Data.SqlDbType.NVarChar);
                    email_contacto.Value = ofertante.Email_Contacto;
                    comando.Parameters.Add(email_contacto);
                    
                    comando.ExecuteNonQuery();
                }
                this.conexion.Close();
                return this.ObtenerOfertante(ofertante.Id_Ofertante);
            //}
        }

        
        
        //EliminarOfertante
        public void EliminarOfertante(Int32 Id_Ofertante_A_Eliminar)
        {
            String sentencia = "DELETE FROM Ofertante WHERE Id_Ofertante=@Id_Ofertante_A_Eliminar";
            this.conexion.Open();

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter pk = new SqlParameter("@Id_Ofertante_A_Eliminar", System.Data.SqlDbType.NVarChar);
                pk.Value = Id_Ofertante_A_Eliminar;
                comando.Parameters.Add(pk);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }

        //ObtenerOfertanteConRucRepetido
        //public Postulante ObtenerOfertanteConRucRepetido(Int32 id_ofer, String ruc)
        //{
        //    String sentencia = "SELECT * FROM ofertante WHERE ruc=@ruc AND Id_Ofertante<>@id_ofer";
        //    this.conexion.Open();
        //    Postulante postulante = null;
        //    using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
        //    {
        //        SqlParameter filtro1 = new SqlParameter("@correo", System.Data.SqlDbType.NVarChar);
        //        filtro1.Value = correo;
        //        comando.Parameters.Add(filtro1);
        //        SqlParameter filtro2 = new SqlParameter("@dni", System.Data.SqlDbType.NVarChar);
        //        filtro2.Value = dni;
        //        comando.Parameters.Add(filtro2);
        //        SqlDataReader resultado = comando.ExecuteReader();
        //        if (resultado.HasRows)
        //        {
        //            resultado.Read();
        //            postulante = new Postulante();
        //            postulante.Dni = (String)resultado["dni"];
        //            postulante.Nombres = (String)resultado["nombres"];
        //            postulante.Apellidos = (String)resultado["apellidos"];
        //            postulante.Edad = (Int32)resultado["edad"];
        //            postulante.Correo = (String)resultado["correo"];
        //            postulante.FechaRegistro = (DateTime)resultado["fechaRegistro"];
        //        }
        //    }
        //    this.conexion.Close();
        //    return postulante;
        //}


    }

}